﻿var tabs = [];


function addTabs(name, href, allowClose = true, onClose) {
    var o = href,
        m = name,
        l = name,
        k = true;
    if (o == undefined || $.trim(o).length === 0) {
        return false;
    }
    $(".roll-menu-tab").each(function () {
        if ($(this).data("id").toString() === o) {
            if (!$(this).hasClass("active")) {
              $(".roll-menu-tab").removeClass("active");
                $(this).addClass("active");
                activeTab($(this).parent());
                $(".tab-mainContent .tab-iframe").each(function () {
                    if ($(this).data("id").toString() === o) {
                        $(this).show().siblings(".tab-iframe").hide();
                        return false;
                    }
                });
            }

            k = false;
            return false;
        }
    });
    if (k) {
        var p = $('<li><a href="javascript:;" class="active roll-menu-tab" data-id="' + o + '">' + l + ' <i class="menu-close iconfont  icon-remove1"></i></a></li>');
        $(".roll-menu-tab").removeClass("active");
        var frame = $('<iframe class="tab-iframe" name="iframe' + m + '" width="100%" height="100%" frameborder="0" data-id="' + o + '" seamless></iframe>');
         $(".tab-mainContent").find("iframe.tab-iframe").hide();
         $(".tab-mainContent").append(frame);
         $(".roll-menu-tabs .page-tabs-content").append(p);

      if (!allowClose) {
          $(".roll-menu-tabs .page-tabs-content").find("a.active>.menu-close").remove();
      }
      setSrc(frame,o);
    
        //  abp.ui.setBusy(frame);


      p.find(".roll-menu-tab").find(".menu-close").click(closeTab);
      p.find(".roll-menu-tab").click(function() {
            addTabs($(this).text(), $(this).attr("data-id"),allowClose);
        });

      activeTab($(".roll-menu-tab.active").parent());
      tabs.push({ id: href, onClose: onClose });
    }

    $(".sidebar li").removeClass("active"); 
    $(".sidebar li").removeClass("menu-open");

    $(".sidebar .treeview-menu").removeAttr("style");

    var menu = $(".sidebar li>a[href='" + o + "']").parent();
    menu.addClass("active");
    menu.parents(".treeview").addClass("active");
    menu.parents(".treeview").addClass("menu-open");

    return false;
}

function closeTabById(id) {
    var tab = $(".roll-menu-tab[data-id='" + id + "']");
  tab.find("i").click();
}

function closeTab() {
    var m = $(this).parents(".roll-menu-tab").data("id");
    var l = $(this).parents(".roll-menu-tab").width();
  if ($(this).parents(".roll-menu-tab").hasClass("active")) {
    if ($(this).parents(".roll-menu-tab").parent().next("li").length > 0) {
      var k = $(this).parents(".roll-menu-tab").parent().next("li:eq(0)").find(".roll-menu-tab").data("id");
      $(this).parents(".roll-menu-tab").parent().next("li:eq(0)").find(".roll-menu-tab").addClass("active");
      $(".tab-mainContent .tab-iframe").each(function() {
        if ($(this).data("id") === k) {
          $(this).show().siblings(".tab-iframe").hide();
          return false;
        }
      });
      var n = parseInt($(".page-tabs-content").css("margin-left"));
      if (n < 0) {
        $(".page-tabs-content").animate({
            marginLeft: (n + l) + "px"
          },
          "fast");
      }
      $(this).parents(".roll-menu-tab").parent().remove();
      $(".tab-mainContent .tab-iframe").each(function() {
        if ($(this).data("id") === m) {
          $(this).remove();
          return false;
        }
      });
      }

     //修改首页为可关闭
    if ($(this).parents(".roll-menu-tab").parent().prev("li").length >= 0) {
      var k = $(this).parents(".roll-menu-tab").parent().prev("li:last").find(".roll-menu-tab").data("id");
      $(this).parents(".roll-menu-tab").parent().prev("li:last").find(".roll-menu-tab").addClass("active");
      $(".tab-mainContent .tab-iframe").each(function() {
        if ($(this).data("id") === k) {
          $(this).show().siblings(".tab-iframe").hide();
          return false;
        }
      });
      $(this).parents(".roll-menu-tab").parent().remove();
      $(".tab-mainContent .tab-iframe").each(function() {
        if ($(this).data("id") === m) {
          $(this).remove();
          return false;
        }
      });
    }
  } else {
    $(this).parents(".roll-menu-tab").parent().remove();
    $(".tab-mainContent .tab-iframe").each(function() {
      if ($(this).data("id") === m) {
        $(this).remove();
        return false;
      }
    });
    activeTab($(".roll-menu-tab.active").parent());
    }

  var tab = tabs.filter(function (r) {
    return r.id === m;
  });

  if (tab.length > 0) {
    if (tab[0].onClose) {
      tab[0].onClose();
    }

    var index = tabs.indexOf(tab[0]);
    tabs.splice(index, 1);
  }

  return false;
}

function closeAllTabs() {
    $(".page-tabs-content").children("li").each(function () {
        $('.tab-iframe[data-id="' + $(this).find(".roll-menu-tab").data("id") + '"]').remove();
        $(this).remove();
    });

    //去掉不能关闭第一个选项卡
    //$(".page-tabs-content").children("li").not(":first").each(function () {
    //    $('.tab-iframe[data-id="' + $(this).find(".roll-menu-tab").data("id") + '"]').remove();
    //    $(this).remove();
    //});
    //$(".page-tabs-content").children("li:first").each(function () {
    //    $('.tab-iframe[data-id="' + $(this).find(".roll-menu-tab").data("id") + '"]').show();
    //    $(this).find(".roll-menu-tab").addClass("active");
    //});
    $(".page-tabs-content").css("margin-left", "0");

  tabs = [];
}

function closeOtherTabs() {

    $(".page-tabs-content").children("li").each(function () {
        if (!$(this).find(".roll-menu-tab").hasClass("active")) {
            $('.tab-iframe[data-id="' + $(this).find(".roll-menu-tab").data("id") + '"]').remove();
            $(this).remove();
        }
    });

    //去掉不能关闭第一个选项卡
  //$(".page-tabs-content").children("li").not(":first").each(function() {
  //  if (!$(this).find(".roll-menu-tab").hasClass("active")) {
  //    $('.tab-iframe[data-id="' + $(this).find(".roll-menu-tab").data("id") + '"]').remove();
  //    $(this).remove();
  //  }
  //});
  $(".page-tabs-content").css("margin-left", "0");

  var m = $(".roll-menu-tab.active").data("id");
  var tab = tabs.filter(function(r) {
    return r.id === m;
  });

  tabs = [];
  tabs.push(tab[0]);
}

function pullLeft() {
    var o = Math.abs(parseInt($(".page-tabs-content").css("margin-left")));
    var l = getWidth($(".content-tabs").children().not(".roll-menu-tabs"));
    var k = $(".content-tabs").outerWidth(true) - l;
    var p = 0;
    if ($(".page-tabs-content").width() < k) {
        return false;
    } else {
        var m = $(".page-tabs-content>li:first");
        var n = 0;
        while ((n + $(m).outerWidth(true)) <= o) {
            n += $(m).outerWidth(true);
            m = $(m).next();
        }
        n = 0;
        if (getWidth($(m).prevAll()) > k) {
            while ((n + $(m).outerWidth(true)) < (k) && m.length > 0) {
                n += $(m).outerWidth(true);
                m = $(m).prev();
            }
            p = getWidth($(m).prevAll());
        }
    }
    $(".page-tabs-content").animate({
            marginLeft: 0 - p + "px"
        },
        "fast");
}

function pullRight() {
    var o = Math.abs(parseInt($(".page-tabs-content").css("margin-left")));
    var l = getWidth($(".content-tabs").children().not(".roll-menu-tabs"));
    var k = $(".content-tabs").outerWidth(true) - l;
    var p = 0;
    if ($(".page-tabs-content").width() < k) {
        return false;
    } else {
        var m = $(".page-tabs-content>li:first");
        var n = 0;
        while ((n + $(m).outerWidth(true)) <= o) {
            n += $(m).outerWidth(true);
            m = $(m).next();
        }
        n = 0;
        while ((n + $(m).outerWidth(true)) < (k) && m.length > 0) {
            n += $(m).outerWidth(true);
            m = $(m).next();
        }
        p = getWidth($(m).prevAll());
        if (p > 0) {
            $(".page-tabs-content").animate({
                    marginLeft: 0 - p + "px"
                },
                "fast");
        }
    }
}

function activeTab(tab) {
    var o = parseInt(getWidth($(tab).prevAll())),
        q = getWidth($(tab).nextAll());
    var l = getWidth($(".content-tabs").children().not(".roll-menu-tabs"));
    var k = $(".content-tabs").outerWidth(true) - l;
    var j = parseInt($(".page-tabs-content").css("marginLeft"));
    var p = 0;
    if ($(".page-tabs-content").outerWidth() < k) {
        p = 0;
    } else {
      if (o + j > k - $(tab).outerWidth(true) || o + j <= 0) {
        var frist = $(tab).prevAll()[$(tab).prevAll().length - 1];

        while (o - $(frist).outerWidth() - p > k - $(tab).outerWidth(true)) {
          p += $(frist).outerWidth();
          frist = $(frist).next();
        }

        p += $(frist).outerWidth();

        if (p === o) {
          p -= $(frist).outerWidth();
        }
      } else {
        p = -j;
      }

      //if (o > k - $(tab).outerWidth(true)) {
      //    var next = tab.prev();

      //    while (o - $(next).outerWidth()-p > k - $(tab).outerWidth(true)) {
      //        p += $(next).outerWidth();
      //        next = $(next).prev();
      //      }
      //}


      //if (q <= (k - $(tab).outerWidth(true) - $(tab).next().outerWidth(true))) {
      //      if ((k - $(tab).next().outerWidth(true)) > q) {
      //          p = o;
      //          var m = tab;
      //          while ((p - $(m).outerWidth()) > ($(".page-tabs-content").outerWidth() - k)) {
      //              p -= $(m).prev().outerWidth();
      //              m = $(m).prev();
      //          }
      //      }
      //  } else {
      //      if (o > (k - $(tab).outerWidth(true) - $(tab).prev().outerWidth(true))) {
      //          p = o - $(tab).prev().outerWidth(true);
      //      }
      //  }
    }
    $(".page-tabs-content").animate({
            marginLeft: 0 - p + "px"
        },
        "fast");
}

function showActive() {
    activeTab($(".roll-menu-tab.active").parent());
}

function getWidth(l) {
    var k = 0;
    $(l).each(function () {
        k += $(this).outerWidth(true);
    });
    return k;
}

$(function () {
  
    $(".push-left").click(pullLeft);
    $(".push-right").click(pullRight);
    $(".tab-closeAll").click(closeAllTabs);
    $(".tab-closeOther").click(closeOtherTabs);
    $(".tab-showActive").click(onRefresh);
    $(".page-refresh").click(onRefresh);

    $(".roll-menu-tab i").click(closeTab);
    $(".roll-menu-tab").click(function() {
        addTabs($(this).text(), $(this).attr("data-id"));
    });
});

function addLoading(elemt) {
  var target = $(elemt);

  var div = $("<div />");
  div.addClass("pre-loader-ui");
  div.append('<div id="preloader_1" class="pre-loader">' +
    '<span></span>' +
    '<span></span>' +
    '<span></span>' +
    '<span></span>' +
    '<span></span>' +
    '</div>');

  target.parent().css("position", "relative");
  div.insertAfter(target);
}

function removeLoading(elemt) {
  $(elemt).next().remove();
}

function setSrc(frame, src) {
  frame.on('load', function () {
    //   abp.ui.clearBusy(frame);
    removeLoading(frame);
  });
  var onLoadUrl = function () {
      frame[0].src = src;
  };
  setTimeout(onLoadUrl, 1);
  addLoading(frame);
}

function onRefresh() {
    var active = $(".roll-menu-tab.active");
    var id = active.data("id");

  $(".tab-mainContent .tab-iframe").each(function () {
      if ($(this).data("id") === id) {
          setSrc($(this), this.src);

        return false;
      }
  });
}